Malware, viruses, and other undesired or ill-behaved software programs sometimes read their own program code in memory to determine whether they are running under a debugger. If so, they do not perform their designed actions (e.g., communicating with control servers). This prevents those actions from being traced and blocked. There is, therefore, a need of setting breakpoints in a way that is invisible to the guest software being debugged.
The attached drawings are for purposes of illustration and are not necessarily to scale.